package mb.kurier.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.xml.xpath.XPathExpressionException;

import mb.commons.AbstractDAO;
import mb.commons.DbConnection;
import mb.commons.XmlHelper;
import mb.kurier.data.CommissionData;

/**
 * Klasa dostepu do bazy danych  dla zleceń kuriera.
 * 
 * @author MichałB
 * 
 */
public class CommissionDAO extends AbstractDAO {

	/**
	 * Konstruktor
	 */
	public CommissionDAO() {
		conn = DbConnection.getConnection();
		helper = new XmlHelper("WEB-INF/xml/kurier/commission.xml");

	}

	/**
	 * Metoda pobiera z bazy danych listę zleceń klienta
	 * 
	 * @return lista zleceń
	 */
	public ArrayList<CommissionData> getCommissionList() {
		ArrayList<CommissionData> list = new ArrayList<CommissionData>();
		CommissionData data;
		String login = this.getLogin();

		try {
			query = helper.getSqlString("commissionList",
					"sqlString/prepareMain/prepareStatment");
			prepStmt = conn.prepareStatement(query);
			prepStmt.setString(1, login);
			ResultSet rs = prepStmt.executeQuery();
			while (rs.next()) {
				data = new CommissionData();
				data.setIdentZamowienia(rs.getInt("id_zamowienia"));
				data.setIdentPaczki(rs.getInt("id_paczki"));
				data.setImieNadawcy(rs.getString("imie1"));
				data.setImieOdbiorcy(rs.getString("imie2"));
				data.setNazwiskoNadawcy(rs.getString("nazwisko1"));
				data.setNazwiskoOdbiorcy(rs.getString("nazwisko2"));
				data.setAdresNadawcy(rs.getString("adres1"));
				data.setAdresOdbiorcy(rs.getString("adres2"));
				data.setKodNadawcy(rs.getString("kod1"));
				data.setKodOdbiorcy(rs.getString("kod2"));
				data.setMiastoNadawcy(rs.getString("miejscowosc1"));
				data.setMiastoOdbiorcy(rs.getString("miejscowosc2"));
				data.setDataNadania(rs.getDate("data_nad"));
				data.setDataOdbioru(rs.getDate("data_dor"));
				data.setStatus(rs.getString("status"));
				data.setOplata(rs.getDouble("oplata"));
				data.setPobranie(rs.getDouble("pobranie"));
				list.add(data);
			}
		} catch (SQLException e) {
			error(e.getErrorCode() + " : " + e.getMessage());
			e.printStackTrace();
		} catch (XPathExpressionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
			close();
		}

		return list;

	}

	/**
	 * Metoda aktualizuje zlecenie w bazie danych
	 */
	public void update(CommissionData data) {
		try {
			query = helper.getSqlString("commissionUpdate",	"sqlString/prepareMain/prepareStatment");
			
			prepStmt = conn.prepareStatement(query);
			
			
			prepStmt.setString(1, data.getStatus());
			prepStmt.setInt(2, data.getIdentZamowienia());
			int t = prepStmt.executeUpdate();
		} catch (SQLException e) {
			error(e.getErrorCode() + " : " + e.getMessage());
			e.printStackTrace();
		} catch (XPathExpressionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public ArrayList<CommissionData> getCommissionHistoryList() {
		ArrayList<CommissionData> list = new ArrayList<CommissionData>();
		CommissionData data;
		String login = this.getLogin();

		try {
			query = helper.getSqlString("commissioHistoryList",
					"sqlString/prepareMain/prepareStatment");
			prepStmt = conn.prepareStatement(query);
			prepStmt.setString(1, login);
			ResultSet rs = prepStmt.executeQuery();
			while (rs.next()) {
				data = new CommissionData();
				data.setIdentZamowienia(rs.getInt("id_zamowienia"));
				data.setIdentPaczki(rs.getInt("id_paczki"));
				data.setImieNadawcy(rs.getString("imie1"));
				data.setImieOdbiorcy(rs.getString("imie2"));
				data.setNazwiskoNadawcy(rs.getString("nazwisko1"));
				data.setNazwiskoOdbiorcy(rs.getString("nazwisko2"));
				data.setAdresNadawcy(rs.getString("adres1"));
				data.setAdresOdbiorcy(rs.getString("adres2"));
				data.setKodNadawcy(rs.getString("kod1"));
				data.setKodOdbiorcy(rs.getString("kod2"));
				data.setMiastoNadawcy(rs.getString("miejscowosc1"));
				data.setMiastoOdbiorcy(rs.getString("miejscowosc2"));
				data.setDataNadania(rs.getDate("data_nad"));
				data.setDataOdbioru(rs.getDate("data_dor"));
				data.setStatus(rs.getString("status"));
				data.setOplata(rs.getDouble("oplata"));
				data.setPobranie(rs.getDouble("pobranie"));
				list.add(data);
			}
		} catch (SQLException e) {
			error(e.getErrorCode() + " : " + e.getMessage());
			e.printStackTrace();
		} catch (XPathExpressionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
			close();
		}

		return list;
	}

}
